# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import os
import sys
import numpy as np

from .coco_eval import bbox2out

import logging
logger = logging.getLogger(__name__)


__all__ = ['bbox2out', 'get_category_info']

def get_category_info(anno_file=None,
                      with_background=True,
                      use_default_label=False):
    clsid2catid = { k:k for k in range(1, 501) }

    catid2name = {
            0:"background",
            1:"Infant bed",
            2:"Rose",
            3:"Flag",
            4:"Flashlight",
            5:"Sea turtle",
            6:"Camera",
            7:"Animal",
            8:"Glove",
            9:"Crocodile",
            10:"Cattle",
            11:"House",
            12:"Guacamole",
            13:"Penguin",
            14:"Vehicle registration plate",
            15:"Bench",
            16:"Ladybug",
            17:"Human nose",
            18:"Watermelon",
            19:"Flute",
            20:"Butterfly",
            21:"Washing machine",
            22:"Raccoon",
            23:"Segway",
            24:"Taco",
            25:"Jellyfish",
            26:"Cake",
            27:"Pen",
            28:"Cannon",
            29:"Bread",
            30:"Tree",
            31:"Shellfish",
            32:"Bed",
            33:"Hamster",
            34:"Hat",
            35:"Toaster",
            36:"Sombrero",
            37:"Tiara",
            38:"Bowl",
            39:"Dragonfly",
            40:"Moths and butterflies",
            41:"Antelope",
            42:"Vegetable",
            43:"Torch",
            44:"Building",
            45:"Power plugs and sockets",
            46:"Blender",
            47:"Billiard table",
            48:"Cutting board",
            49:"Bronze sculpture",
            50:"Turtle",
            51:"Broccoli",
            52:"Tiger",
            53:"Mirror",
            54:"Bear",
            55:"Zucchini",
            56:"Dress",
            57:"Volleyball",
            58:"Guitar",
            59:"Reptile",
            60:"Golf cart",
            61:"Tart",
            62:"Fedora",
            63:"Carnivore",
            64:"Car",
            65:"Lighthouse",
            66:"Coffeemaker",
            67:"Food processor",
            68:"Truck",
            69:"Bookcase",
            70:"Surfboard",
            71:"Footwear",
            72:"Bench",
            73:"Necklace",
            74:"Flower",
            75:"Radish",
            76:"Marine mammal",
            77:"Frying pan",
            78:"Tap",
            79:"Peach",
            80:"Knife",
            81:"Handbag",
            82:"Laptop",
            83:"Tent",
            84:"Ambulance",
            85:"Christmas tree",
            86:"Eagle",
            87:"Limousine",
            88:"Kitchen & dining room table",
            89:"Polar bear",
            90:"Tower",
            91:"Football",
            92:"Willow",
            93:"Human head",
            94:"Stop sign",
            95:"Banana",
            96:"Mixer",
            97:"Binoculars",
            98:"Dessert",
            99:"Bee",
            100:"Chair",
            101:"Wood-burning stove",
            102:"Flowerpot",
            103:"Beaker",
            104:"Oyster",
            105:"Woodpecker",
            106:"Harp",
            107:"Bathtub",
            108:"Wall clock",
            109:"Sports uniform",
            110:"Rhinoceros",
            111:"Beehive",
            112:"Cupboard",
            113:"Chicken",
            114:"Man",
            115:"Blue jay",
            116:"Cucumber",
            117:"Balloon",
            118:"Kite",
            119:"Fireplace",
            120:"Lantern",
            121:"Missile",
            122:"Book",
            123:"Spoon",
            124:"Grapefruit",
            125:"Squirrel",
            126:"Orange",
            127:"Coat",
            128:"Punching bag",
            129:"Zebra",
            130:"Billboard",
            131:"Bicycle",
            132:"Door handle",
            133:"Mechanical fan",
            134:"Ring binder",
            135:"Table",
            136:"Parrot",
            137:"Sock",
            138:"Vase",
            139:"Weapon",
            140:"Shotgun",
            141:"Glasses",
            142:"Seahorse",
            143:"Belt",
            144:"Watercraft",
            145:"Window",
            146:"Giraffe",
            147:"Lion",
            148:"Tire",
            149:"Vehicle",
            150:"Canoe",
            151:"Tie",
            152:"Shelf",
            153:"Picture frame",
            154:"Printer",
            155:"Human leg",
            156:"Boat",
            157:"Slow cooker",
            158:"Croissant",
            159:"Candle",
            160:"Pancake",
            161:"Pillow",
            162:"Coin",
            163:"Stretcher",
            164:"Sandal",
            165:"Woman",
            166:"Stairs",
            167:"Harpsichord",
            168:"Stool",
            169:"Bus",
            170:"Suitcase",
            171:"Human mouth",
            172:"Juice",
            173:"Skull",
            174:"Door",
            175:"Violin",
            176:"Chopsticks",
            177:"Digital clock",
            178:"Sunflower",
            179:"Leopard",
            180:"Bell pepper",
            181:"Harbor seal",
            182:"Snake",
            183:"Sewing machine",
            184:"Goose",
            185:"Helicopter",
            186:"Seat belt",
            187:"Coffee cup",
            188:"Microwave oven",
            189:"Hot dog",
            190:"Countertop",
            191:"Serving tray",
            192:"Dog bed",
            193:"Beer",
            194:"Sunglasses",
            195:"Golf ball",
            196:"Waffle",
            197:"Palm tree",
            198:"Trumpet",
            199:"Ruler",
            200:"Helmet",
            201:"Ladder",
            202:"Office building",
            203:"Tablet computer",
            204:"Toilet paper",
            205:"Pomegranate",
            206:"Skirt",
            207:"Gas stove",
            208:"Cookie",
            209:"Cart",
            210:"Raven",
            211:"Egg",
            212:"Burrito",
            213:"Goat",
            214:"Kitchen knife",
            215:"Skateboard",
            216:"Salt and pepper shakers",
            217:"Lynx",
            218:"Boot",
            219:"Platter",
            220:"Ski",
            221:"Swimwear",
            222:"Swimming pool",
            223:"Drinking straw",
            224:"Wrench",
            225:"Drum",
            226:"Ant",
            227:"Human ear",
            228:"Headphones",
            229:"Fountain",
            230:"Bird",
            231:"Jeans",
            232:"Television",
            233:"Crab",
            234:"Microphone",
            235:"Home appliance",
            236:"Snowplow",
            237:"Beetle",
            238:"Artichoke",
            239:"Jet ski",
            240:"Stationary bicycle",
            241:"Human hair",
            242:"Brown bear",
            243:"Starfish",
            244:"Fork",
            245:"Lobster",
            246:"Corded phone",
            247:"Drink",
            248:"Saucer",
            249:"Carrot",
            250:"Insect",
            251:"Clock",
            252:"Castle",
            253:"Tennis racket",
            254:"Ceiling fan",
            255:"Asparagus",
            256:"Jaguar",
            257:"Musical instrument",
            258:"Train",
            259:"Cat",
            260:"Rifle",
            261:"Dumbbell",
            262:"Mobile phone",
            263:"Taxi",
            264:"Shower",
            265:"Pitcher",
            266:"Lemon",
            267:"Invertebrate",
            268:"Turkey",
            269:"High heels",
            270:"Bust",
            271:"Elephant",
            272:"Scarf",
            273:"Barrel",
            274:"Trombone",
            275:"Pumpkin",
            276:"Box",
            277:"Tomato",
            278:"Frog",
            279:"Bidet",
            280:"Human face",
            281:"Houseplant",
            282:"Van",
            283:"Shark",
            284:"Ice cream",
            285:"Swim cap",
            286:"Falcon",
            287:"Ostrich",
            288:"Handgun",
            289:"Whiteboard",
            290:"Lizard",
            291:"Pasta",
            292:"Snowmobile",
            293:"Light bulb",
            294:"Window blind",
            295:"Muffin",
            296:"Pretzel",
            297:"Computer monitor",
            298:"Horn",
            299:"Furniture",
            300:"Sandwich",
            301:"Fox",
            302:"Convenience store",
            303:"Fish",
            304:"Fruit",
            305:"Earrings",
            306:"Curtain",
            307:"Grape",
            308:"Sofa bed",
            309:"Horse",
            310:"Luggage and bags",
            311:"Desk",
            312:"Crutch",
            313:"Bicycle helmet",
            314:"Tick",
            315:"Airplane",
            316:"Canary",
            317:"Spatula",
            318:"Watch",
            319:"Lily",
            320:"Kitchen appliance",
            321:"Filing cabinet",
            322:"Aircraft",
            323:"Cake stand",
            324:"Candy",
            325:"Sink",
            326:"Mouse",
            327:"Wine",
            328:"Wheelchair",
            329:"Goldfish",
            330:"Refrigerator",
            331:"French fries",
            332:"Drawer",
            333:"Treadmill",
            334:"Picnic basket",
            335:"Dice",
            336:"Cabbage",
            337:"Football helmet",
            338:"Pig",
            339:"Person",
            340:"Shorts",
            341:"Gondola",
            342:"Honeycomb",
            343:"Doughnut",
            344:"Chest of drawers",
            345:"Land vehicle",
            346:"Bat",
            347:"Monkey",
            348:"Dagger",
            349:"Tableware",
            350:"Human foot",
            351:"Mug",
            352:"Alarm clock",
            353:"Pressure cooker",
            354:"Human hand",
            355:"Tortoise",
            356:"Baseball glove",
            357:"Sword",
            358:"Pear",
            359:"Miniskirt",
            360:"Traffic sign",
            361:"Girl",
            362:"Roller skates",
            363:"Dinosaur",
            364:"Porch",
            365:"Human beard",
            366:"Submarine sandwich",
            367:"Screwdriver",
            368:"Strawberry",
            369:"Wine glass",
            370:"Seafood",
            371:"Racket",
            372:"Wheel",
            373:"Sea lion",
            374:"Toy",
            375:"Tea",
            376:"Tennis ball",
            377:"Waste container",
            378:"Mule",
            379:"Cricket ball",
            380:"Pineapple",
            381:"Coconut",
            382:"Doll",
            383:"Coffee table",
            384:"Snowman",
            385:"Lavender",
            386:"Shrimp",
            387:"Maple",
            388:"Cowboy hat",
            389:"Goggles",
            390:"Rugby ball",
            391:"Caterpillar",
            392:"Poster",
            393:"Rocket",
            394:"Organ",
            395:"Saxophone",
            396:"Traffic light",
            397:"Cocktail",
            398:"Plastic bag",
            399:"Squash",
            400:"Mushroom",
            401:"Hamburger",
            402:"Light switch",
            403:"Parachute",
            404:"Teddy bear",
            405:"Winter melon",
            406:"Deer",
            407:"Musical keyboard",
            408:"Plumbing fixture",
            409:"Scoreboard",
            410:"Baseball bat",
            411:"Envelope",
            412:"Adhesive tape",
            413:"Briefcase",
            414:"Paddle",
            415:"Bow and arrow",
            416:"Telephone",
            417:"Sheep",
            418:"Jacket",
            419:"Boy",
            420:"Pizza",
            421:"Otter",
            422:"Office supplies",
            423:"Couch",
            424:"Cello",
            425:"Bull",
            426:"Camel",
            427:"Ball",
            428:"Duck",
            429:"Whale",
            430:"Shirt",
            431:"Tank",
            432:"Motorcycle",
            433:"Accordion",
            434:"Owl",
            435:"Porcupine",
            436:"Sun hat",
            437:"Nail",
            438:"Scissors",
            439:"Swan",
            440:"Lamp",
            441:"Crown",
            442:"Piano",
            443:"Sculpture",
            444:"Cheetah",
            445:"Oboe",
            446:"Tin can",
            447:"Mango",
            448:"Tripod",
            449:"Oven",
            450:"Mouse",
            451:"Barge",
            452:"Coffee",
            453:"Snowboard",
            454:"Common fig",
            455:"Salad",
            456:"Marine invertebrates",
            457:"Umbrella",
            458:"Kangaroo",
            459:"Human arm",
            460:"Measuring cup",
            461:"Snail",
            462:"Loveseat",
            463:"Suit",
            464:"Teapot",
            465:"Bottle",
            466:"Alpaca",
            467:"Kettle",
            468:"Trousers",
            469:"Popcorn",
            470:"Centipede",
            471:"Spider",
            472:"Sparrow",
            473:"Plate",
            474:"Bagel",
            475:"Personal care",
            476:"Apple",
            477:"Brassiere",
            478:"Bathroom cabinet",
            479:"studio couch",
            480:"Computer keyboard",
            481:"Table tennis racket",
            482:"Sushi",
            483:"Cabinetry",
            484:"Street light",
            485:"Towel",
            486:"Nightstand",
            487:"Rabbit",
            488:"Dolphin",
            489:"Dog",
            490:"Jug",
            491:"Wok",
            492:"Fire hydrant",
            493:"Human eye",
            494:"Skyscraper",
            495:"Backpack",
            496:"Potato",
            497:"Paper towel",
            498:"Lifejacket",
            499:"Bicycle wheel",
            500:"Toilet",
    }
    
    if not with_background:
        clsid2catid = {k - 1: v for k, v in clsid2catid.items()}
    return clsid2catid, catid2name
    